#include <iostream>
#include <algorithm>
using namespace std;
int main() {
    // first 表示开始的位置
    // k 表示翻转的位数
    // n 表示数据的个数
    // temp表示节点地址
    int first, k, n, temp;
    cin >> first >> n >> k;
    //
    int data[100005], next[100005], list[100005];
    // 输入数据
    for (int i = 0; i < n; i++) {
        // 输入节点地址
        cin >> temp;
        // 输入在该位置的值 以及下一个节点
        cin >> data[temp] >> next[temp];
    }

    int sum = 0;//不一定所有的输入的结点都是有用的，加个计数器

    while (first != -1) {
        // 将地址好序，放入list中
        list[sum++] = first;
        // list[0] 对应的是第一个地址，list[1]是第二个地址
        // 所以可以用i+1来访问下一个地址
        first = next[first];
    }
    // i < (sum - sum % k)
    // eg. 1 2 3 4 5 6 (k = 2) ==> i < 7 - 1
    for (int i = 0; i < (sum - sum % k); i += k)
        reverse(begin(list) + i, begin(list) + i + k);
    for (int i = 0; i < sum - 1; i++)
        printf("%05d %d %05d\n", list[i], data[list[i]], list[i + 1]);
    printf("%05d %d -1", list[sum - 1], data[list[sum - 1]]);
    return 0;
}